import { login, getUserInfo, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'
import { setToken, getToken, removeToken, setTimeStamp } from '@/utils/auth'
const state = {
  // token: null
  // 进入页面拿到token
  token: getToken(),
  // 首页数据
  userInfo: {}
}
const mutations = {
  // 修改token
  setToken(state, token) {
    // 改变state里面的token
    state.token = token
    // 存入token
    setToken(token)
  },
  // 删除token
  removeToken(state) {
    state.token = null
    // setToken('')
    // 也可以使用花裤衩的封装(他封装了一个方法，使用时记得引入方法)
    removeToken()
  },
  // 拿到首页用户信息
  setUserInfo(state, data) {
    // 保留原来的对象
    state.userInfo = { ...data }
  },
  // 删除首页用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(store, data) {
    // login(data).then(res => {
    //   store.commit('setToken', res.data.data)
    //   console.log(res)
    // })
    // 这里没有做错误处理，他会把错误传给调用者
    const res = await login(data)
    // console.log(res)
    store.commit('setToken', res)
    // 登陆成功，调用事件戳（存入Cookies）
    setTimeStamp()
  },
  // 首页用户信息请求
  async getUserInfo(store) {
    const res = await getUserInfo()
    // 先获取用户基本信息
    // 再获取用户头像，然后两个合并
    const resDetail = await getUserDetailById(res.userId)

    const data = {
      ...res,
      ...resDetail
    }

    store.commit('setUserInfo', data)
  },
  // 点击退出登陆，删除token
  logout(store) {
    // 调用花裤衩的封装，清除高权限路由残留
    resetRouter()
    store.commit('permission/setRoutes', [], { root: true })
    // 清除token和用户信息
    store.commit('removeToken')
    store.commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
